const Model = require('./model')
const BaseMongo = require('../base')
const { stateKeys } = require('../base/model')

/**
 * 学习总结
 */
class StudyMongo extends BaseMongo{

	constructor () {
		super()
	}

	/**
	 * 获取个人数据里面需要显示的列表数据
	 * @param num 需要获取的数据个数
	 * @returns {Promise<void>}
	 */
	static findMeShwoData(num) {
		const field = ['title', 'date', 'type', 'describe', 'pic']
		const model = Model.find({}, field).skip(0).limit(num)
		model.sort({'date': -1})
		return model.exec()
	}

	/**
	 * 查询数据列表
	 * @param data type: 类型 searchKey: 关键字 page: 页码 count:个数
	 * @returns {Promise<void>}
	 */
	static find(data) {
		const params = { $or: [
				{stateKey: stateKeys.NORMAL},
				{stateKey: {$exists: false}}
			]}
		if (data.type) {
			params.type = data.type
		}
		if (data.searchKey) {
			const reg = { $regex: `${data.searchKey}`, "$options": "i" }
			switch (data.searchType) {
				case '0':
					params['$or'] = [
						{'title': reg},
						{'describe': reg},
						{'content': reg}
					]
					break
				case '1':
					params['title'] = reg
					break
				case '2':
					params['describe'] = reg
					break
				case '3':
					params['content'] = reg
					break
			}
		}
		const skip = (data.page - 1) * data.count
		const field = this.existparameter(['title', 'date', 'type', 'describe', 'pic'])
		const model = Model.find(params, field).skip(skip).limit(data.count)
		model.sort({'date': -1})
		return model.exec()
	}

	/**
	 * 更新数据
	 * @param data 更新的数据
	 * @returns {Promise<*>}
	 */
	static update(data) {
		return Model.updateOne(
			{_id: this.objId(data.id)},
      this.getJson(data, ['title', 'pic', 'describe', 'date', 'content', 'type']))
	}

	/**
	 * 查询字段的不同数据数组
	 * @param key 字段名
	 * @returns {Promise<*>}
	 */
  static distinct(key) {
    return Model.distinct(key, {
			$or: [
				{stateKey: stateKeys.NORMAL},
				{stateKey: {$exists: false}}
			]
		})
  }
}

/**
 * 设置当前模型
 */
StudyMongo.model = Model

/**
 * 添加字段数组
 * @type {Array}
 */
StudyMongo.fieldArr = ['title', 'type', 'content', 'describe', 'pic']

module.exports = StudyMongo
